package com.hemaapp.yjnh;

import xtom.frame.util.XtomSharedPreferencesUtil;
import android.content.Context;
import android.text.TextUtils;
import android.util.Log;

import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationClientOption.AMapLocationMode;
import com.amap.api.location.AMapLocationListener;

/**定位当前位置
 * @author GuiyouZhang
 * Date：2015年11月26日 下午2:33:03
 * Email:guiyouzhang@163.com
 */
public class BaseLocation {
	
	//声明AMapLocationClient类对象
	public AMapLocationClient mLocationClient = null;
	//声明mLocationOption对象
	public AMapLocationClientOption mLocationOption = null;
	private Context mContext;
	private int time = 0;//尝试次数
	private static BaseLocation location;

	public BaseLocation(Context context) {
		mContext = context;
		//初始化定位
		mLocationClient = new AMapLocationClient(context);
		//设置定位回调监听
		mLocationClient.setLocationListener(mLocationListener);
	}

	public static BaseLocation getInstance(Context context) {
		if (location == null)
			location = new BaseLocation(context);
		return location;
	}

	public void startLocation() {
		//初始化定位参数
		mLocationOption = new AMapLocationClientOption();
		//设置定位模式为高精度模式，Battery_Saving为低功耗模式，Device_Sensors是仅设备模式
		mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy);
		//设置是否返回地址信息（默认返回地址信息）
		mLocationOption.setNeedAddress(true);
		//设置是否只定位一次,默认为false
		mLocationOption.setOnceLocation(false);
		//设置是否强制刷新WIFI，默认为强制刷新
		mLocationOption.setWifiActiveScan(true);
		//设置是否允许模拟位置,默认为false，不允许模拟位置
		mLocationOption.setMockEnable(false);
		//设置定位间隔,单位毫秒,默认为2000ms
		mLocationOption.setInterval(2000);
		//给定位客户端对象设置定位参数
		mLocationClient.setLocationOption(mLocationOption);
		//启动定位
		mLocationClient.startLocation();
	}

	private void stopLocation() {
		mLocationClient.stopLocation();//停止定位
		mLocationClient.onDestroy();//销毁定位客户端。
	}
	
	//声明定位回调监听器
	public AMapLocationListener mLocationListener = new AMapLocationListener() {
		
		@Override
		public void onLocationChanged(AMapLocation amapLocation) {
			if (amapLocation != null) {
				if (amapLocation.getErrorCode() == 0) {
					// 定位成功回调信息，获取相关消息的方法如下汇总：
//					amapLocation.getLocationType();// 获取当前定位结果来源，如网络定位结果，详见定位类型表
//					amapLocation.getLatitude();// 获取经度
//					amapLocation.getLongitude();// 获取纬度
//					amapLocation.getAccuracy();// 获取精度信息
//					amapLocation.getAddress();// 地址，如果option中设置isNeedAddress为false，则没有此结果
//					amapLocation.getCountry();// 国家信息
//					amapLocation.getProvince();// 省信息
//					amapLocation.getCity();// 城市信息
//					amapLocation.getDistrict();// 城区信息
//					amapLocation.getRoad();// 街道信息
//					amapLocation.getCityCode();// 城市编码
//					amapLocation.getAdCode();// 地区编码
					
					//定位完成后，保存定位的经纬度
					XtomSharedPreferencesUtil.save(mContext, "lat", amapLocation.getLatitude()+"");
					XtomSharedPreferencesUtil.save(mContext, "lng", amapLocation.getLongitude()+"");
					XtomSharedPreferencesUtil.save(mContext, "province", amapLocation.getProvince());
					XtomSharedPreferencesUtil.save(mContext, "city", amapLocation.getCity());
					XtomSharedPreferencesUtil.save(mContext, "location_city", amapLocation.getCity());
					XtomSharedPreferencesUtil.save(mContext, "area", amapLocation.getDistrict());
					XtomSharedPreferencesUtil.save(mContext, "address", amapLocation.getRoad());
					//定位成功后停止定位
					stopLocation();
				} else {
					// 显示错误信息ErrCode是错误码，errInfo是错误信息，详见错误码表。
					Log.e("AmapError", "location Error, ErrCode:"
							+ amapLocation.getErrorCode() + ", errInfo:"
							+ amapLocation.getErrorInfo());
					time++;
					Log.e("AmapError", "尝试第"+time+"次");
					if (time < 10) {
						startLocation();
					}else {
						stopLocation();
					}
				}
			}
		}
	};
}
